--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vendor/lxmfy/tests/conftest.py dev (8f381c86) Text, 4.71 KB
T8b949e"""Test configuration and fixtures for LXMFy tests."""
Tff7b72import T7ee787os
Tff7b72import T7ee787tempfile
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path
Tff7b72import T7ee787pytest
Tff7b72import T7ee787RNS
Tff7b72from T7ee787LXMF Tff7b72import Te6edf3LXMRouter
Tff7b72from T7ee787lxmfy Tff7b72import Te6edf3BotConfigTb4b4b4, Te6edf3LXMFBot
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_config_dirTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Create a temporary directory for test configurations."""
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3temp_dirTb4b4b4:
Te6edf3config_path Tff7b72= Te6edf3PathTb4b4b4(Te6edf3temp_dirTb4b4b4) Tff7b72/ Ta5d6ff"Ta5d6fftest_configTa5d6ff"
Te6edf3config_pathTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72yield Te6edf3config_path
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffreticulum_instanceTb4b4b4(Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Initialize a Reticulum instance for testing."""
Te6edf3config_dir Tff7b72= Te6edf3test_config_dir Tff7b72/ Ta5d6ff"Ta5d6ffreticulumTa5d6ff"
Te6edf3config_dirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
T8b949e# Initialize Reticulum with test config
Te6edf3reticulum Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTb4b4b4(
Te6edf3configdirTff7b72=Tffa657strTb4b4b4(Te6edf3config_dirTb4b4b4)Tb4b4b4,
Te6edf3loglevelTff7b72=Te6edf3RNSTff7b72.Td2a8ffLOG_CRITICALTb4b4b4, T8b949e# Minimize logging in tests
Te6edf3verbosityTff7b72=T79c0ff0Tb4b4b4,
Tb4b4b4)
Tff7b72yield Te6edf3reticulum
T8b949e# Cleanup
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffexit_handlerTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_identityTb4b4b4(Te6edf3reticulum_instanceTb4b4b4, Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Create a test identity."""
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3identity
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_destinationTb4b4b4(Te6edf3test_identityTb4b4b4, Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Create a test destination for messaging."""
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(
Te6edf3test_identityTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffINTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4,
Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftestTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffset_proof_strategyTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffPROVE_NONETb4b4b4) T8b949e# Disable proof for tests
Tff7b72return Te6edf3dest
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fflxmf_routerTb4b4b4(Te6edf3test_identityTb4b4b4, Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Create an LXMF router for testing."""
Te6edf3storage_path Tff7b72= Te6edf3test_config_dir Tff7b72/ Ta5d6ff"Ta5d6fflxmf_storageTa5d6ff"
Te6edf3storage_pathTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3router Tff7b72= Te6edf3LXMRouterTb4b4b4(
Te6edf3identityTff7b72=Te6edf3test_identityTb4b4b4,
Te6edf3storagepathTff7b72=Tffa657strTb4b4b4(Te6edf3storage_pathTb4b4b4)Tb4b4b4,
Te6edf3autopeerTff7b72=Tff7b72FalseTb4b4b4, T8b949e# Disable auto-peering in tests
Te6edf3propagation_limitTff7b72=T79c0ff10Tb4b4b4,
Te6edf3delivery_limitTff7b72=T79c0ff10Tb4b4b4,
Tb4b4b4)
T8b949e# Register delivery identity (creates destination internally)
Te6edf3delivery_destination Tff7b72= Te6edf3routerTff7b72.Td2a8ffregister_delivery_identityTb4b4b4(
Te6edf3test_identityTb4b4b4,
Te6edf3display_nameTff7b72=Ta5d6ff"Ta5d6ffTestRouterTa5d6ff"Tb4b4b4,
Tb4b4b4)
T8b949e# Store the delivery destination for tests
Te6edf3routerTff7b72.Td2a8ff_test_delivery_dest Tff7b72= Te6edf3delivery_destination
Tff7b72return Te6edf3router
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_bot_configTb4b4b4(Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Create a test bot configuration."""
Tff7b72return Te6edf3BotConfigTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffTestBotTa5d6ff"Tb4b4b4,
Te6edf3announceTff7b72=T79c0ff0Tb4b4b4, T8b949e# Disable announcing in tests
Te6edf3announce_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3adminsTff7b72=Tffa657setTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3hot_reloadingTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3rate_limitTff7b72=T79c0ff100Tb4b4b4, T8b949e# High rate limit for tests
Te6edf3cooldownTff7b72=T79c0ff1Tb4b4b4,
Te6edf3max_warningsTff7b72=T79c0ff10Tb4b4b4,
Te6edf3warning_timeoutTff7b72=T79c0ff60Tb4b4b4,
Te6edf3command_prefixTff7b72=Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4,
Te6edf3cogs_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3permissions_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3storage_typeTff7b72=Ta5d6ff"Ta5d6ffjsonTa5d6ff"Tb4b4b4,
Te6edf3storage_pathTff7b72=Tffa657strTb4b4b4(Te6edf3test_config_dir Tff7b72/ Ta5d6ff"Ta5d6ffbot_storageTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3first_message_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3signature_verification_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3require_message_signaturesTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3require_stampsTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3stamp_costTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3test_modeTff7b72=Tff7b72TrueTb4b4b4, T8b949e# Enable test mode to skip RNS initialization
Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_botTb4b4b4(Te6edf3test_bot_configTb4b4b4, Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Create a test bot instance."""
T8b949e# Override config_path for testing
T8b949e# Use a unique config path per test
Tff7b72import T7ee787uuid
Te6edf3unique_config_path Tff7b72= Te6edf3test_config_dir Tff7b72/ Ta5d6fffTa5d6ff"Ta5d6ffbot_Tffd700{Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffhexTb4b4b4[Tb4b4b4:T79c0ff8Tb4b4b4]Tffd700}Ta5d6ff"
Te6edf3unique_config_pathTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3config Tff7b72= Te6edf3test_bot_configTff7b72.Td2a8ff__dict__Tff7b72.Td2a8ffcopyTb4b4b4(Tb4b4b4)
Te6edf3configTb4b4b4[Ta5d6ff"Ta5d6ffstorage_pathTa5d6ff"Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3unique_config_path Tff7b72/ Ta5d6ff"Ta5d6ffstorageTa5d6ff"Tb4b4b4)
Te6edf3bot Tff7b72= Te6edf3LXMFBotTb4b4b4(Tff7b72*Tff7b72*Te6edf3configTb4b4b4)
Te6edf3botTff7b72.Td2a8ffconfig_path Tff7b72= Tffa657strTb4b4b4(Te6edf3unique_config_pathTb4b4b4)
Tff7b72yield Te6edf3bot
T8b949e# Cleanup
Tff7b72tryTb4b4b4:
Te6edf3botTff7b72.Td2a8ffcleanupTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_message_dataTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Sample message data for testing."""
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffTest message contentTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftitleTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffTest TitleTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffsource_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffabc123def456Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdef456abc789Ta5d6ff"Tb4b4b4,
Tb4b4b4}
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftemp_fileTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Create a temporary file for testing."""
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffNamedTemporaryFileTb4b4b4(Te6edf3modeTff7b72=Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3deleteTff7b72=Tff7b72FalseTb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ffTest file contentTa5d6ff"Tb4b4b4)
Te6edf3temp_path Tff7b72= Te6edf3fTff7b72.Td2a8ffname
Tff7b72yield Te6edf3temp_path
T8b949e# Cleanup
Tff7b72tryTb4b4b4:
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3temp_pathTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3autouseTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffcleanup_reticulumTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Clean up Reticulum state between tests."""
Tff7b72yield
T8b949e# Force cleanup of any lingering links or destinations
Tff7b72tryTb4b4b4:
T8b949e# This is a best-effort cleanup
Tff7b72pass
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────